package com.sy.mapper;

import com.sun.org.apache.xpath.internal.operations.Bool;
import com.sy.dto.StudentTabInfo;
import com.sy.entity.*;
import com.sy.dto.StuInfo;
import com.sy.dto.StudentMagTable;
import com.sy.vo.Answers;
import com.sy.vo.ShortAnswer;
import com.sy.vo.StuInfoVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface StudentMapper {
   /**
    * 根据学号查找学生
    * @param account
    * @return
    */
   Student getStudentByAccount(String account);
   /**
    * 根据学生id查找学生
    * @param id
    * @return
    */
   Student getStudentById(String id);

   /**
    * 根据学生id查找学生信息
    * @param id
    * @return
    */
   StuInfo getStuInfoById(String id);

   /**
    * 修改学生信息
    */
   boolean updateStuInfo(StuInfoVo stuInfoVo);
   /**
    * 更改密码
    * @param newPwd
    * @param id
    * @return
    */
   boolean changeStuPwd(@Param("newPwd") String newPwd, @Param("id") String id);

   /**
    *根据班级id获取学生列表
    */
   List<StudentMagTable> getStudentListByClassIds(@Param("classes") List<Integer> classIds);

   /**
    * 根据关键词查找学生
    */
   List<StudentMagTable> getStudentListByKeyWords(@Param("name") String nameSearch,@Param("studyNo") String studyNoSearch,@Param("classes") List<Integer> classIds);


   /**
    * 根据学生的id去查询学生在那个班级
    */

   Student getStudentsMessage(String id);
   /**
    * 根据学生的id去查询学生没做过的作业列表
    */
     List<HomeWorkMessage>  getAllNotDoHomeWork(@Param("id") String id,@Param("keywords")String keywords,@Param("classId")Integer classId);




   /**
    * 根据作业的id去查询对应的所有的题目的内容
    */

     List<ChoiceQuestion> getAllQuestionsByHomeWorkId(String id);

   /**
    *根据题号的id查询所有的选择题
    */
   List<Choice>  getAllContentByQuestionId(String choiceQuestionId);



   /**
    *根据题号的id查询简答题的内容
    */

   ShortQuestion getStudentNotDoHomeWorkShortQuestion(String id);


   /**
    * 拿到学生已经做过的作业列表
    */

      List<HomeWorkMessage> getAllHaveDoHomeWork(@Param("id") String id,@Param("keywords")String keywords,@Param("classId")Integer classId);


   /**
    * 拿到学生的作业成绩
    */

   List<StudentShowScore>  getStudentGradeById(@Param("id") String id,@Param("condition") Integer condition,@Param("keywords") String keywords);


   /**
    * 学生拿到老师上传的文件
    */

   List<StudentDownloadCourseware>  getTeacherUploadFile(@Param("teacherId")Integer teacherId,@Param("keywords") String keywords);


   /**
    * 根据班级的id去查询对应的老师id
    */
   ClassMsg selectTeacherByClassId(Integer classId);

   /**
    * 作者：张德帅
    * 查询所有学生信息
    * @return  所有的学生信息列表
    */
   List<StudentTabInfo> getAllStudentInfo();

   /**
    * 作者：张德帅
    * 根据关键词查询所有符合条件的管理员学生管理界面所需学生信息
    * @param keyWords
    * @return  所有符合条件的学生信息列表
    */
   List<StudentTabInfo> getStudentInfoByKeyWords(String keyWords);

   /**
    * 作者：张德帅
    * 添加学生信息
    * @param student 添加的学生信息对象
    * @return  添加学生信息操作是否成功的布尔值
    */
   Boolean addStudentInfo(Student student);

   /**
    * 作者：张德帅
    * 根据学生id删除学生信息
    * @param id   学生id
    * @return  删除学生信息操作是否成功的布尔值
    */
   Boolean delStudentInfoById(Integer id);

   /**
    * 作者：张德帅
    * 根据学生id修改学生信息
    * @param student 要修改的学生对象（包含学生id和要修改的信息）
    * @return  修改学生信息操作是否成功的布尔值
    */
   Boolean updateStudentInfoById(Student student);


   /**
    * 往数据库里添加学生写的简答题答案
    * @param studentId 学生id
    * @param shortquestionId 简答题的id
    * @param answer 作业答案
    * @return 布尔值
    */
   boolean insertShortAnswer(@Param("studentId")Integer studentId,@Param("shortquestionId")Integer shortquestionId,@Param("answer")String answer,@Param("homeworkId")Integer homeworkId);

   /**
    *往数据库里添加学生写的选择题答案
    * @param studentId 学生id
    * @param choicequestionId 选择题id
    * @param choiceId 答案id
    * @param homeworkId 作业的id
    * @return
    */
   boolean insertChoiceAnswer(@Param("studentId")Integer studentId,@Param("choicequestionId")Integer choicequestionId,@Param("choiceId")Integer choiceId,@Param("homeworkId")Integer homeworkId);


   /**
    * 根据作业的id去查询对应的选择题答案
    */

   List<Answers> selectSubmitChoiceAnswer(@Param("homeworkId") Integer homeworkId,@Param("studentId")Integer studentId);


   /**
    * 根据作业的Idq去查询对应的简答题答案
    */

    ShortAnswer selectSubmitShortAnswer(@Param("homeworkId") Integer homeworkId,@Param("studentId")Integer studentId);


   /**
    * 更新答案表里的选择题选项
    */
    boolean  updateChoiceAnswer(@Param("choiceId") Integer choiceId,@Param("homeworkId") Integer homeworkId,@Param("choicequestionId") Integer choicequestionId,@Param("studentId")Integer studentId);


   /**
    *更新简答题答案表里的答案
    */

    boolean updateShortQuestionAnswer(@Param("answer")String answer,@Param("homeworkId")Integer homeworkId,@Param("shortquestionId")Integer shortquestionId,@Param("studentId")Integer studentId);

   /**
    * 根据班级id获取学生id列表
    */
   List<Integer> getStudentsIdListByClassId(@Param("id") Integer classId);

   /**
    * 根据作业id查找已提交作业的学生id列表
    */
   List<Integer> getStudentIdListForSubmit(@Param("id")Integer homeworkId);

   /**
    * 根据学生id列表获得学生详细信息
    */
   List<StudentMagTable> getStudentsByIdList(@Param("vo") List<Integer> studentIdList);


   /**
    *查找学生的个人信息
    */

     Student selectStudentsOwnMessage(Integer id);


   /**
    * 根据学生的班级id去查找学生的班级信息
    */
   ClassMsg selectClassMessageByClassId(Integer classId);


   /**
    * 更新学生新修改的个人信息
    */

   boolean updateStudentNewMessage(@Param("name")String name,@Param("gender")String gender,@Param("phone")String phone,@Param("id")Integer id);

   /**
    * 修改学生的密码
    */

   boolean updateStudentPassword(@Param("password")String password,@Param("id")Integer id);


   /**
    * 根据作业的标题去查询作业
    */
    Homework   selectHomeWorkIdByTitle(String  title);


   /**
    * 根据作业的id去查询对应选择题的id
    */
   List< ChoiceAnswer> selectAllChoiceIdByHomeworkId(Integer homeworkId);

   /**
    * 根据选择题的id去查找对应的中文答案
    */

   Choice selectTrueChoiceAnswerByChoiceId(Integer choiceQuestionId);
}
